/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package sixdegrees.android;

import java.io.DataOutputStream;
import java.io.IOException;
import java.math.BigDecimal;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import javax.ejb.EJB;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import redinftel.entidades.Amistad;
import redinftel.entidades.Multimedia;
import redinftel.entidades.Publicacion;
import redinftel.entidades.Usuario;
import redinftel.formularios.BuscarGradoSeparacionBean;
import redinftel.formularios.ObtenerPerfilBean;
import redinftel.formularios.PublicarBean;
import redinftel.sesiones.AmistadFacadeRemote;
import redinftel.sesiones.PerfilFacadeRemote;
import redinftel.sesiones.PublicacionFacadeRemote;
import redinftel.sesiones.UsuarioFacadeRemote;

/**
 *
 * @author inftel
 */
public class ObtenerMuroServlet extends HttpServlet {

    @EJB
    private PerfilFacadeRemote perfilFacade;
    @EJB
    private AmistadFacadeRemote amistadFacade;
    @EJB
    private UsuarioFacadeRemote usuarioFacade;
    @EJB
    private PublicacionFacadeRemote publicacionFacade;
    final String USUARIO = "usuario";

    /**
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        ServletOutputStream sos = response.getOutputStream();
        DataOutputStream dos = new DataOutputStream(sos);
        try {
            HttpSession sesion = request.getSession();
            Usuario yo = ((Usuario) sesion.getAttribute(USUARIO));
            String idAmigo = request.getParameter("idAmigo");
            Usuario usuario;

            ObtenerPerfilBean opb = new ObtenerPerfilBean(true);
            opb.setAmistadFacade(amistadFacade);
            opb.setUsuarioFacade(usuarioFacade);
            opb.setPerfilFacade(perfilFacade);

            // obtener el String idamigo y el Usuario usuario
            if (!opb.isSoyYo(idAmigo, yo)) {
                usuario = ((Usuario) usuarioFacade.find(new BigDecimal(idAmigo)));
            } else {
                usuario = yo;
            }

            // enviar nombre
            dos.writeUTF(usuario.getPerfil().getNombre() + " " + usuario.getPerfil().getApellidos());

            // enviar foto
            Multimedia foto = usuario.getPerfil().getMultimedia();
            if (foto == null) {
                dos.writeBoolean(false);
            } else {
                dos.writeBoolean(true);
                dos.writeInt(foto.getImagen().length);
                for (int i = 0; i < foto.getImagen().length; i++) {
                    dos.write(foto.getImagen()[i]);
                }
            }


            // condiciones
            String condiciones = "";
            boolean envio = false;
            if (opb.isSoyYo(idAmigo, yo)) {
                condiciones = "yo";
                envio = true;
            } else if (opb.isAmigos(idAmigo, yo)) {
                condiciones = "amigos";
                envio = true;
            } else if (opb.isAmistadSolicitada(idAmigo, yo)) {
                condiciones = "amistadSolicitada";
            } else if (opb.isSoySolicitado(idAmigo, yo)) {
                condiciones = "soySolicitado";
            } else {
                condiciones = "desconocido";
            }

            dos.writeUTF(condiciones);

            if (envio) {
                // enviar muro
                PublicarBean pb = new PublicarBean(true);
                pb.setPublicacionFacade(publicacionFacade);
                pb.setUsuarioFacade(usuarioFacade);
                List<Publicacion> muro = pb.getListaPublicaciones(idAmigo);
                dos.writeInt(muro.size());
                for (Publicacion p : muro) {
                    dos.writeUTF(p.getUsuario1().getPerfil().getNombre() + " " + p.getUsuario1().getPerfil().getApellidos());
                    if (p.getTitulo() != null) {
                        dos.writeUTF(p.getTitulo());
                    } else {
                        dos.writeUTF("");
                    }
                    if (p.getContenido() != null) {
                        dos.writeUTF(p.getContenido());
                    } else {
                        dos.writeUTF("");
                    }
                    dos.writeUTF(String.valueOf(p.getFecha().getHours())+":"+String.valueOf(p.getFecha().getMinutes())+":"+String.valueOf(p.getFecha().getSeconds())+" "+String.valueOf(p.getFecha().getDate()) + "/" + String.valueOf(p.getFecha().getMonth() + 1) + "/" + String.valueOf(p.getFecha().getYear() + 1900));
                }
            } else {
                BuscarGradoSeparacionBean bgsb = new BuscarGradoSeparacionBean(true);
                Set<Usuario> listaAmigos = new HashSet<Usuario>();
                for (Amistad a : yo.getAmistadCollection()) {
                    if (!a.getIdAmigo1().equals(yo)) {
                        listaAmigos.add(a.getIdAmigo1());
                    }
                    if (!a.getIdAmigo2().equals(yo)) {
                        listaAmigos.add(a.getIdAmigo2());
                    }
                }
                for (Amistad a : yo.getAmistadCollection1()) {
                    if (!a.getIdAmigo1().equals(yo)) {
                        listaAmigos.add(a.getIdAmigo1());
                    }
                    if (!a.getIdAmigo2().equals(yo)) {
                        listaAmigos.add(a.getIdAmigo2());
                    }
                }
                dos.writeInt(bgsb.gradoSeparacion(yo, listaAmigos));
            }
        } finally {
            dos.close();
        }
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /** 
     * Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /** 
     * Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /** 
     * Returns a short description of the servlet.
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>
}
